/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.fd.dao;

import java.util.Collection;
import java.util.List;

import com.xy.biz.fd.domain.bo.DocumentBO;
import com.xy.biz.fd.domain.po.DocumentPO;
import com.xy.biz.fd.domain.query.DocumentQuery;
import org.apache.ibatis.annotations.Param;

/**
 *
 *
 * @author wwj
 * @date 2021-2-1
 */
public interface DocumentDao {

	/**
	 * 保存
	 *
	 * @param documentPO
	 */
	int saveDocument(DocumentPO documentPO);

	/**
	 * 保存多个
	 *
	 * @param list
	 */
	int saveAllDocument(@Param("list") Collection<DocumentPO> list);

	/**
	 * 更新
	 *
	 * @param documentPO
	 */
	int updateDocument(DocumentPO documentPO);

	/**
	 * 批量更新
	 *
	 * @param collection
	 */
	int updateDocumentAll(Collection<DocumentPO> collection);

	/**
	 * 批量更新
	 *
	 * @param query
	 */
	int updateDocumentByIds(DocumentQuery query);

	/**
	 * 更新权限
	 *
	 * @param documentPO
	 */
	int updateDocumentPermission(DocumentPO documentPO);

	/**
	 * 删除
	 *
	 * @param documentId
	 */
	int deleteDocument(Long documentId);

	/**
	 * 删除
	 *
	 * @param collection
	 */
	int deleteDocuments(Collection<Long> collection);

	/**
	 * 查找一个
	 *
	 * @param documentId
	 * @return
	 */
	DocumentPO getDocument(Long documentId);

	/**
	 * 查找一个
	 *
	 * @param documentQuery
	 * @return
	 */
	DocumentPO getLatestVersion(DocumentQuery documentQuery);

	/**
	 * 查找多条
	 *
	 * @param collection
	 * @return
	 */
	List<DocumentPO> listDocumentById(Collection<Long> collection);

	/**
	 * 条件查找多条
	 *
	 * @param query 查找条件
	 * @return
	 */
	List<DocumentPO> listDocument(DocumentQuery query);

	/**
	 * 条件统计个数
	 *
	 * @param query 查找条件
	 * @return
	 */
	int countDocument(DocumentQuery query);

	/**
	 * 根据文件夹id 知识库id查询文件
	 * @param documentQuery
	 * @return
	 */
	List<DocumentPO> listDocumentByFolderId(DocumentQuery documentQuery);

	/**
	 * 根据路径查找
	 * @param path
	 * @return
	 */
	DocumentPO getDocumentPath(String path);

	/**
	 * 根据路径更新文件大小
	 * @param documentPO
	 * @return
	 */
	int updateDocumentSizeByPath(DocumentPO documentPO);

	/**
	 * 根据文件名模糊查询文件
	 * @param documentPO 文件
	 * @return
	 */
	List<DocumentPO> listDocumentByName(DocumentPO documentPO);

}
